﻿//数据类型
//#include <stdio.h>
//#include <stdbool.h>
//int main()
//{
//	
//#define bool _Bool
//#define false 0
//
//	return 0;
//}
// ------------------------------------------
//sizeof操作符
//#include <stdio.h>
//int main()
//{
//	int a = 0;
//	printf("%zd\n", sizeof(a));//sizeof计算结果时size_t类型的，用%zd占位符
//	printf("%zd\n", sizeof a);
//	printf("%zd\n", sizeof(int));//int 类型是4个字节
//	printf("%zd\n", sizeof(3 + 3.5));
//	return 0;
//}
//char bool 1字节 
// short 2字节
//int long float  4字节
//longlong  double 8 字节
// ----------------------------------------------------
//sizeof 中表达式不计算
//#include <stdio.h>
//int main()
//{
//	short s = 2;
//	int b = 20;
//	printf("%d\n", sizeof(s = b + 1));
//	printf("s = %d\n", s);
//	return 0;
//}
// 
//-----------------------------------
// 数据类型的长度
//# include <stdio.h>
//int main()
//{
//	printf("%zd\n", sizeof(char));
//	printf("%zd\n", sizeof(_Bool));
//	printf("%zd\n", sizeof(short));
//	printf("%zd\n", sizeof(int));
//	printf("%zd\n", sizeof(long));
//	printf("%zd\n", sizeof(long long));
//	printf("%zd\n", sizeof(float));
//	printf("%zd\n", sizeof(double));
//	printf("%zd\n", sizeof(long double));
//	return 0;
//}
// ---------------------------------
//# include  <stdio.h>
//int main()
//{
//	int age ;//int称为变量，age称为变量名
//	char a;// char 为字符变量，a 为变量名
//	return 0;
//}
// 
//变量的分类
//#include  <stdio.h>
//int global  = 2025;// 全局变量
//int main()
//{
//	int local = 2018;//局部变量
//	printf("%d\n", global);
//	printf("%d\n", local);
// return 0 ;
// }
	//全局变量只能在自己的大括号内使用 ；局部变量可以在整个工程中使用
//#include <stdio.h>
//	int n = 10000;
//	int main()
//	{
//		int n = 100;
//		printf("%d\n", n);
//		return 0;
//	}
//当全局变量和局部变量一样时，局部变量优先
//----------------------------
//算数操作符
//#include  <stdio.h>
//int main()
//{
//	float x = 6 / 4;
//	int y =  6/4;
//	printf("%f\n", x);//输出1.0000
//	printf("%d\n", y);//输出1 整数除法，会丢弃小数部分
//	return 0;
//}
//得到浮点数，则两个运算数必须至少有一个浮点数
//#include <stdio.h>
//int main()
//{
//	float x= 6.0 / 4;
//	printf("%f\n", x);
//	return 0;s
//}
// -----------------------------------
// 双目操作符
//#include <stdio.h>
//int main()
//{
//	int x = 4 + 22;
//	int y = 61 - 23;
//	printf("%d\n", x);
//	printf("%d\n", y);
//	return 0;
//}
// ------------------------------------
//单目操作符
//前置++
//#include  <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = ++a;
//	printf("a=%d b=%d\n", a, b);//先+1，后使用，a先＋1变为11，再把a赋值给b
//	return 0;
//}
//后置++
//#include <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = a++;
//	scanfs("%d", 5);
//	printf("a=%d b=%d\n", a, b);
//	return 0;
//}
// --------------------------------
// 纠正VS中scanf函数不安全问题
#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	return  0;
//}
//---------------------------------------
//字符串和/0
//#include <stdio.h>
//int main()
//{
//	printf("%s\n", "abcdef");
//	printf("%s\n", "hello C");
//	return 0;
//}
//转义字符
//#include <stdio.h>
//int main()
//{
//	printf("adcdef");
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	printf("adc\ndef");
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	printf("abc\tdef\n");
//	printf("abc=====de");
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int score = 5;
//	score = (score / 20) * 100;
//	printf("%d\n", score);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	printf("%d\n", 11 % -5); // 1
//	printf("%d\n", -11 % -5); // -1
//	printf("%d\n", -11 % 5); // -1
//	return 0;
//}
//# include <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = a++;//++的操作数是a，是放在a的前⾯的，就是前置++
//		printf("a=%d b=%d\n", a, b);
//	return 0;
//}
//# include <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = a--;//--的操作数是a，是放在a的后⾯的，就是后置--
//	printf("a=%d b=%d\n", a, b);//输出的结果是：a=9 b=10
//}
//#include <stdio.h>
//int mina()
//{
//	int a = 10;
//	int b = -a;
//	int c = -10;
//	printf("b=%d c=%d\n", b, c);//这⾥的b和c都是 - 10
//	int a = -10;
//	int b = -a;
//	printf("b=%d\n", b);//这⾥的b是10
//}
//----------------------------------------------
//前置--
//# include <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = --a;//先-1 再使用，a - 1 = 9  b = 9
//	printf("%d\n", b);
//
//	return 0;
//}
//后置--
//# include <stdio.h>
//int main()
//{
//
//	int a = 10;
//	int b = a--;//先使用，后-1 b=a=10,a = 9
//	printf("%d\n", b);
//	return 0;
//}
//----------------------------
//+和-(正和负）
//# include <stdio.h>
//int main()
//{
//	int a = -10;
//	printf("%d\n", -a);
//	printf("%d\n", +a);
//	return 0;
//}
//-------------------------
//强制类型转换
//#include <stdio.h>
//int main()
//{
//	//int a =  3.14;
//	int a = (int)3.14f;
//	printf("%d\n", a);
//	return 0;
//}
//----------------------------
//多个占位符情况
//# include <stdio.h>
//int main()
//{
//	printf("%d\n", 10);
//	printf("%o\n", 10);
//	printf("%x\n", 10);
//	return 0;
//}
//# include <stdio.h>
//int main()
//{
//	printf("%d\n", 123);
//	printf("%5d\n", 123);
//	printf("%-5d-----\n", 123);
//
//	printf("%5d\n", 1234567);//不够5位的取5位，超过5位的全部输出
//
//
//	return 0;
//}
//-------------------------
//限定小数位数
//#include <stdio.h>
//int main()
//{
	//默认小数点后会有6位小数
	//----------限定宽度
	/*printf("%f\n", 123.456);
	printf("%12f\n", 123.456);*///12,会限定所有数字最小宽度为12位
	/*printf("%5d\n", 123);
	printf("%-5d==\n", 123)*/;//默认右对齐，想要左对齐加- 号
	/*printf("%+d\n", 12);
	printf("%-d\n", -12);
	-------------限定小数位数*/
	//printf("%.3f\n", 123.456);//.3是输出三位小数
	//printf("%f\n", 0.5);//%f，浮点数默认6位小数
	//printf("%6.2f\n", 0.5);//与限定宽度占位符结合使用，该数字最小宽度为6，保留两位小数
	//printf("%*.*f\n", 6,2, 0.5);//最⼩宽度和⼩数位数这两个限定值，
	//都可以⽤*代替，通过过printf()的参数传⼊,，%* .*f的两个星号通过printf()的两个参数6和2传⼊。
	//--------------输出字符串
//	printf("%.5s\n", "hello,world");//占位符%.5s表⽰只输出字符串“helloworld”的前5个字符，即“hello”
//	return 0;
//}
	/*----------------------------------
		scanf函数*/
//#include <stdio.h>
//	int main()
//	{
//		int x;
//		int y;
//		scanf(" %d\n", &x);
//		printf("%d\n", x);
//
//		scanf("%f\n", &y);
//		printf("%f\n", y);
//
//		return 0;
//	}
	/*------------------
		处理多个占位符的情况*/
//#include <stdio.h>
//	int main()
//	{
//		int x;
//		float y;
//		scanf("%d %f", &x, &y);
//		printf("%d %f\n", x, y);
//		return 0;
// }
//# include <stdio.h>
//	int main()
//	{
//		int a = 0;
//		int b = 0;
//		int c = 0;
//		scanf("%d%d%d", &a, &b, &c);
//		printf("%d %d %d\n", a, b, c);
//		return 0;
//	}
	//------------------------
	//scanf的返回值
//# include <stdio.h>
//	int main()
//	{
//		int a = 0;
//		int b = 0;
//		while (scanf(" %d %d", &a, &b) != EOF)//循环输入
//		{
//			printf("%d\n", a + b);
//		}
//		return 0;
//	}
//#include <stdio.h>
//	int main ()
//	{
//		int a = 0;
//		int b = 0;
//		float f = 0.0f;
//		int r = scanf("%d %d %d ", &a, &b, &f);
//		printf("%d %d %d \n", a, b, f);
//		printf("r = %d\n", r);
//		return 0;
//	}
	//----------------------------
	//占位符
//# include <stdio.h>
//	int main()
//{
//	char ch = 0;
//	scanf("%c", &ch);//输入
//	printf("===%c===\n", ch);//占位符除了%c以外，其它都会自动忽略起手的空白字符。
//// %c不忽略空⽩字符，总是返回当前第⼀个字符，⽆论该字符是否为空格。
//	//如果要强制跳过字符前的空⽩字符，可以写成scanf(" %c",&ch),在%c前面加一个空格
//	return 0;
//}
//# include <stdio.h>
//	int main()
//{
//	char arr[20] = "xxxxxxxxx";//字符数组
//	scanf("%s", arr);  //arr是数组名，数组名本来就是地址
//	printf("%s\n", arr);//%s遇到空白字符（即空格、换⾏符、制表符等）就停止了，可以输入
// 	   //输入 hello world试一下，只打印出hello，而不打印world
//
//	return 0;
//}
	//赋值忽略符
//# include <stdio.h>
//	int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	//输入
//	char ch1 = 0;
//	char ch2 = 0;
//	//scanf("%d/%d/%d", &year, &month, &day);//2025/1/15
//	scanf("%d%*c%d%*c%d", &year,  &month, &day);//2025/1/15
//	printf("%d %d %d\n", year, month, day);//只要把*加在任何占位符的百分号后⾯，
//	//该占位符就不会返回值，解析后将被丢弃。%*c就是在占位符%的后面加入了赋值忽略符*，
//	// 这个占位符解读后不用被返回
//		return 0;
//	}
//第二章数据类型和变量完成！！！
